/*
 * src/pl/plpython/plpy_main.h
 */

#ifndef PLPY_MAIN_H
#define PLPY_MAIN_H

#include "plpy_procedure.h"

/* 解释器的全局字典 */
extern PyObject *PLy_interp_globals;

/*
 * PL/Python 执行上下文的堆栈。每当调用用户定义的 Python 代码时，
 * 就会创建一个执行上下文并压入堆栈。待 Python 代码返回后，
 * 上下文被销毁。
 */
typedef struct PLyExecutionContext
{
	PLyProcedure *curr_proc;	/* 当前执行的过程 */
	MemoryContext scratch_ctx;	/* 用于类型输入/输出的上下文 */
	struct PLyExecutionContext *next;	/* 先前的堆栈级别 */
} PLyExecutionContext;

/* 获取当前执行上下文 */
extern PLyExecutionContext *PLy_current_execution_context(void);

/* 获取指定执行上下文的临时内存上下文 */
extern MemoryContext PLy_get_scratch_context(PLyExecutionContext *context);

#endif							/* PLPY_MAIN_H */
